package com.xue;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;

import com.xue.gateway.HostAddrKeyResolver;


/**
 * 
 * @ClassName: GatewayApplication 
 * @Description: 秒杀系统网关 主程序
 * @author zzx
 *
 * @date 2020年1月3日
 */
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class GatewayApplication {

	public static void main(String[] args) {
		 SpringApplication.run(GatewayApplication.class,args);

	}
	@Bean
    public HostAddrKeyResolver hostAddrKeyResolver() {
        return new HostAddrKeyResolver();
    }
	/**
	 * 自定义路径断言
	 * id：我们自定义的路由 ID，保持唯一
	 * uri：目标服务地址
	 * predicates：路由条件，Predicate 接受一个输入参数，返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑（比如：与，或，非）。
	 * filters：过滤规则，本示例暂时没用。
	 * new_route 路由ID  /aaa 路由条件  uri 目标服务地址
	 * route("new_route", r -> r.path("/aaa").uri("http://www.baidu.com"))
	 * @param builder
	 * @return
	 */
	@Bean
	public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
		
		return builder.routes()
				.route("new_route", r -> r.path("/aaa")
						.uri("https://www.baidu.com"))
				.build();
	}
}
